package br.org.ifrr.controller;

import java.io.Serializable;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;

import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.org.ifrr.model.GrupoUsuario;
import br.org.ifrr.model.Usuario;
import br.org.ifrr.repository.GrupoUsuarios;
import br.org.ifrr.service.CadastroUsuarioService;
import br.org.ifrr.util.jsf.FacesUtil;

@Named
@ViewScoped
public class CadastroUsuarioBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private CadastroUsuarioService cadastroUsuarioService;

	@Inject
	private GrupoUsuarios grupos;

	private Usuario usuario;

	private GrupoUsuario grupoUsuarioSelecionado;

	private List<GrupoUsuario> gruposListados;

	public CadastroUsuarioBean() {
		this.limpar();
		grupoUsuarioSelecionado = new GrupoUsuario();
	}

	public List<GrupoUsuario> getGruposListados() {
		return gruposListados;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public void inicializar() {

		System.out.println("Inicializando...");
		if (FacesUtil.isNotPostback()) {
			gruposListados = grupos.todos();
		}
	}

	public void salvar() {
		
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(this.usuario.getSenha().getBytes());

			BigInteger hash = new BigInteger(1, md.digest());
			String senhaCriptografada = hash.toString(16);

			while (senhaCriptografada.length() < 32) {
				senhaCriptografada = "0" + senhaCriptografada;
			}

			this.usuario.setSenha(senhaCriptografada);

		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		this.usuario = cadastroUsuarioService.salvar(this.usuario);
		this.limpar();

		FacesUtil.addInfoMessage("Cadastro efetuado com sucesso.");
	}

	public void limpar() {
		this.usuario = new Usuario();
		gruposListados = null;
	}

	public void selecionarGrupo() {
		usuario.getGrupos().add(grupoUsuarioSelecionado);

		FacesUtil.addInfoMessage("Adicionado ao grupo de "
				+ grupoUsuarioSelecionado.getNome());
	}

	public GrupoUsuario getGrupoUsuarioSelecionado() {
		return grupoUsuarioSelecionado;
	}

	public void setGrupoUsuarioSelecionado(GrupoUsuario grupoUsuarioSelecionado) {
		this.grupoUsuarioSelecionado = grupoUsuarioSelecionado;
	}

}
